iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Mobile Development

Android 開發者養成計畫:從程式邏輯到作品集實戰系列 第 29

Day 29- 打造 App 的質感!讓圖片載入又快又順

  • 分享至 

  • xImage
  •  

Day 5我們學過如何使用 ImageView,為你的 App 加上漂亮的「相框」,讓它充滿色彩。

但是,當我們遇到一個問題:如果你的「相框」裡要放的是數百張網路照片,還每次都要重新下載一次,那會發生什麼事呢?你的 App 可能會變得非常卡頓,甚至當機。

今天,我們要學習一個「專業的圖片搬運工」—— Glide,讓你的 App 載入圖片又快又順。

圖片載入的痛點:為什麼不直接用 setImageResource()

想像一下,你的 App 就像一間餐廳,圖片就是你要端給客人的菜餚。

當你用 setImageResource() 顯示本地圖片時,就像是廚師直接從廚房裡的冰箱(drawable 資料夾)拿出食材,非常快。

但是,當你要從網路載入圖片時,就像是廚師每次都要跑到很遠的超市(伺服器)去採買,再回來料理。如果客人很多(像是 RecyclerView 裡有數百張照片),廚師就會累到跑不動,整個餐廳(App)的服務都會停擺。

什麼是 Glide?

簡單比喻:Glide 就像是你的餐廳請了一位專業的物流經理。這位經理會幫你處理所有跟圖片有關的雜事,讓你的廚師(主執行緒)可以專心工作。

核心用途:

  • 自動化: 你只需要告訴他圖片的網址,他就會自動處理下載、顯示,甚至還會做圖片壓縮,讓載入速度更快。
  • 非同步載入: 他會請專門的搬運工(背景執行緒)去下載圖片,不會卡住你的 App 畫面
  • 快取(Cache): 他最厲害的一點,就是會在 App 裡建立一個**「專屬圖片倉庫」**。當他搬運過某張圖片後,會先存一份在倉庫裡。下次你再要同樣的圖片時,他會直接從倉庫裡拿給你,完全不用再跑到超市去

實作時間:用 Glide 讓 RecyclerView 飛起來

今天,我們要修改你 Day 9RecyclerView 專案,讓它能流暢地顯示網路圖片!

步驟 1:新增 Glide 函式庫

要請這位物流經理(Glide)來幫忙,你需要在你的專案中簽約
打開你的 build.gradle (Module) 檔案,在 dependencies 區塊裡,加上這兩行程式碼:

`dependencies {
    // ... 其他依賴

    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}`

接著,點擊右上角的 "Sync Now",讓 Android Studio 安裝這個函式庫。

步驟 2:修改你的 RecyclerView Adapter

打開你的 Adapter 檔案(例如 MyAdapter.java),找到 onBindViewHolder() 這個方法。

假設你的資料來源(例如 ArrayList)中,有一個 imageUrl 欄位來存放圖片網址。你只需要用一行程式碼,就能告訴 Glide,請他把圖片載入到你的 ImageView 上。

`// 這是 RecyclerView 的 Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    // ... 其他程式碼

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        // 假設你的資料物件 Product 有一個 getImageURL() 方法
        String imageUrl = productList.get(position).getImageURL();

        // 告訴 Glide,請他把圖片從這個網址(imageUrl)載入到這個 ImageView(holder.imageView)
        Glide.with(holder.itemView.getContext())
             .load(imageUrl)
             .into(holder.imageView);
    }

    // ... 其他程式碼
}`

程式碼解釋:

  • Glide.with() 告訴 Glide,我們要在哪個「範圍」(例如 App 畫面)內使用它。
  • .load(imageUrl) 這是最重要的指令,告訴 Glide 你要載入的圖片網址是什麼。
  • .into(holder.imageView) 告訴 Glide,要把圖片顯示在哪一個「相框」(ImageView) 裡。

執行你的 App!

當你再次執行你的 App,你會發現 RecyclerView 列表中的圖片載入變得非常順暢。即使你快速滑動,圖片也能很快地顯示出來,不再有卡頓感。

今日總結

今天我們學會了:

  • 了解直接載入網路圖片可能帶來的效能問題,例如卡頓和記憶體消耗。
  • 認識了 Glide 這個「專業的圖片搬運工」,知道它如何透過非同步載入與快取來解決問題。
  • RecyclerView 中,使用 Glide 只需一行程式碼就能輕鬆載入網路圖片。

明天見!


上一篇
Day28- 偵探的工具:Logcat 與偵錯技巧
下一篇
Day 30 App 的記憶力!資料庫與離線模式
系列文
Android 開發者養成計畫:從程式邏輯到作品集實戰30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言